<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
</head>
<body>
	<script type="text/javascript">
		function fun(){
			let n = 999;
			nAdd = function () { n++ }
			return function(){
				console.log(n)
			}
		}
		let getN1 = fun()
		getN1()
		nAdd()
		let getN2 = fun()
		getN2()
		getN1()
		getN2()
		/*
			js的闭包
			因为 fun返回一个函数，并且返回的函数包含了fun函数内部的数据引用，所以 getN1 和 getN2 是两个闭包
			所以 getN1 和 getN2 维护了两个不同的变量 n
			所以 打印的 n 的结果由当前闭包的 n 的值决定
			getN1 执行完后，立即执行 nAdd 函数，所以，自己所维护的 n 变为了 999，所以，下次执行时 打印结果为 1000
			getN2 执行完后，并没有对自己维护的 n 进行修改，所以，每次执行 getN2 打印的结果都是 999
		*/
	</script>
</body>
</html>